/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package autopecas.Negocios;

import autopecas.ClasseBasica.Cliente;
import autopecas.Dados.DadosCliente;
import autopecas.Dados.DadosMetodosAux;
import autopecas.Exception.ClienteException;
import java.sql.SQLException;
import java.util.ArrayList;

/**
 *
 * @author NeGo
 */
public class NegocioCliente {

    ArrayList<Cliente> listacliente;
    DadosCliente dados;

    public NegocioCliente() {
        listacliente = new ArrayList<>();
        dados = new DadosCliente();
    }

    /**
     * Metodo para Regra de Cadastrar do Cliente onde serão validados possiveis
     * eventos .
     *
     * @param texto texto para Regra de Cadastro
     * @return true se validacoes estiverem de acordo conforme instrução, false
     * se não conter os dados necessarios
     */

    public void RegraCadrasto(Cliente c) throws  SQLException, ClienteException {

        if (c.getCpf() < 0) {
            throw new ClienteException(" O cpf não pode ser menor que zero");
        }
        if (Long.toString(c.getCpf()).length() < 11) {

            throw new ClienteException(" o Numero de digitos no CPF nao pode ser menor que 11");
        } else if (Long.toString(c.getCpf()).length() > 11) {
            throw new ClienteException(" O Numero de digitos no CPF nao pode ser maior que 11");
        }
        if(DadosMetodosAux.validarExistencia(c.getCpf())){
            
            throw new ClienteException("O Cpf Informado já está cadastrado");
            
        }
        if (c.getNome() == null) {

            throw new ClienteException(" O campo Nome Não pode estar Nula");

        } else if (c.getNome().trim().equals("") == true) {

            throw new ClienteException(" O campo  nome não pode estar vazio");

        }
        dados.cadastrar(c);
    }

    /**
     * Metodo para Regra de Remoção do Cliente onde serão validados possiveis
     * eventos .
     *
     * @param texto texto para Regra de Remover
     * @return true se validacoes estiverem de acordo conforme instrução, false
     * se não conter os dados necessarios
     */
    public void RegraRemover(Cliente c) throws  SQLException, ClienteException {
        if (c.getCpf() < 0) {
            throw new ClienteException(" O CPF informando nao pode ser menor que Zero");
        }
        if(DadosMetodosAux.validarExistencia(c.getCpf()) == false){
            throw new ClienteException(" O Cpf nao foi encontrado");
        }
        dados.remover(c);
    }

    /**
     * Metodo para Regra de Atualizar do Cliente onde serão validados possiveis
     * eventos para que possam alterar os dados do cliente .
     *
     * @param texto texto para Regra de Atualizar
     * @return true se validacoes estiverem de acordo conforme instrução, false
     * se não conter os dados necessarios
     */

    public void RegraAtualizar(Cliente c) throws SQLException, ClienteException {

        if (c.getCpf() < 0) {
            throw new ClienteException(" O cpf não pode ser menor que zero");
        }
        if (Long.toString(c.getCpf()).length() < 11) {

            throw new ClienteException(" o Numero de digitos no CPF nao pode ser menor que 11");
        } else if (Long.toString(c.getCpf()).length() > 11) {
            throw new ClienteException(" O Numero de digitos no CPF nao pode ser maior que 11");
        }

        if (c.getNome() == null) {

            throw new ClienteException(" O campo Nome Não pode estar Nula");

        } else if (c.getNome().trim().equals("") == true) {

            throw new ClienteException(" O campo  nome não pode estar vazio");

        }
        dados.atualizar(c);
    }

    /**
     * Metodo para Regra de Listagem do Cliente onde serão validados possiveis
     * eventos .
     *
     * @param texto texto para Regra da Lista
     * @return true se validacoes estiverem de acordo conforme instrução, false
     * se não conter os dados necessarios
     */

    public ArrayList<Cliente> RegraListar() throws  SQLException, ClienteException {
        return dados.Listar();
    }
}
